{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 替换",
   "id": "f1bce74389d172ac"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 1. 字符串中的替换",
   "id": "a79159d4bfe26be1"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T06:40:42.481092Z",
     "start_time": "2025-09-15T06:40:42.473510Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from pandas.conftest import axis_1\n",
    "\n",
    "# 基本字符串替换\n",
    "text = \"你好，世界！^你好，中国！^我们一起学习中国话！^中国加油！\"\n",
    "\n",
    "# 把中国替换成祖国\n",
    "# result = text.replace('中国','祖国')\n",
    "# print(result)\n",
    "\n",
    "result = text.replace(\"中国\",\"祖国\",1)\n",
    "print(result)"
   ],
   "id": "c6d183ff0654df34",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你好，世界！^你好，祖国！^我们一起学习祖国话！^祖国加油！\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "## 2. pandas中的替换\n",
    "- DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method=None)"
   ],
   "id": "85de3fa9c377b895"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:01:50.097765Z",
     "start_time": "2025-09-15T07:01:50.084561Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "path = 'D:/2506A/monty03/day16/file/'\n",
    "\n",
    "# 整个表全部替换 将城八区改成 京八区\n",
    "df = pd.read_excel(path+'替换.xlsx')\n",
    "df.replace('城八区','京八区',inplace=True)\n",
    "print(df)"
   ],
   "id": "bef12ecec66e0ae1",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家   省市   城市  城市2   数值\n",
      "0  中国   北京  京八区  京八区  100\n",
      "1  中国   北京  京八区  京八区    A\n",
      "2  中国  NaN  京八区  京八区    B\n",
      "3  中国   北京  京八区  京八区    C\n",
      "4  中国   北京  京八区  京八区    D\n",
      "5  中国   北京  京八区  京八区    E\n",
      "6  中国   北京  京八区  京八区    F\n",
      "7  中国   北京  京八区  京八区    G\n",
      "8  中国   北京  京八区  京八区    H\n",
      "9  中国   北京  京八区  京八区    I\n"
     ]
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:12:01.158300Z",
     "start_time": "2025-09-15T07:12:01.140148Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 替换指定的列， 将城市2 中的城八区 替换成 海淀区\n",
    "df = pd.read_excel(path+'替换.xlsx')\n",
    "\n",
    "# 方式一使用replace替换\n",
    "# df['城市2'] = df['城市2'].replace('城八区','海淀区')\n",
    "# print(data)\n",
    "\n",
    "# 方式二：用loc\n",
    "df.loc[df['城市2'] == '城八区','城市2'] ='海淀区'\n",
    "print(df)"
   ],
   "id": "5237776b62971f69",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家   省市   城市  城市2   数值\n",
      "0  中国   北京  城八区  海淀区  100\n",
      "1  中国   北京  城八区  海淀区    A\n",
      "2  中国  NaN  城八区  海淀区    B\n",
      "3  中国   北京  城八区  海淀区    C\n",
      "4  中国   北京  城八区  海淀区    D\n",
      "5  中国   北京  城八区  海淀区    E\n",
      "6  中国   北京  城八区  海淀区    F\n",
      "7  中国   北京  城八区  海淀区    G\n",
      "8  中国   北京  城八区  海淀区    H\n",
      "9  中国   北京  城八区  海淀区    I\n"
     ]
    }
   ],
   "execution_count": 30
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 字典和列表替换\n",
   "id": "153d02196168caa9"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:32:12.890475Z",
     "start_time": "2025-09-15T07:32:12.884472Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 用字典替换\n",
    "dict1 = {\n",
    "    'A':50,\n",
    "    'B':60\n",
    "}\n",
    "df.replace(dict1,inplace=True)\n",
    "print(df)"
   ],
   "id": "b602f5c298fc779e",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家   省市   城市  城市2   数值\n",
      "0  中国   北京  城八区  城八区  100\n",
      "1  中国   北京  城八区  城八区   50\n",
      "2  中国  NaN  城八区  城八区   60\n",
      "3  中国   北京  城八区  城八区    C\n",
      "4  中国   北京  城八区  城八区    D\n",
      "5  中国   北京  城八区  城八区    E\n",
      "6  中国   北京  城八区  城八区    F\n",
      "7  中国   北京  城八区  城八区    G\n",
      "8  中国   北京  城八区  城八区    H\n",
      "9  中国   北京  城八区  城八区    I\n"
     ]
    }
   ],
   "execution_count": 60
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:32:15.435316Z",
     "start_time": "2025-09-15T07:32:15.430233Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 用列表进行替换\n",
    "list1 = ['C','D']\n",
    "list2 = [70,80]\n",
    "df.replace(list1,list2,inplace=True)\n",
    "print(df)"
   ],
   "id": "3337badafb54b496",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家   省市   城市  城市2   数值\n",
      "0  中国   北京  城八区  城八区  100\n",
      "1  中国   北京  城八区  城八区   50\n",
      "2  中国  NaN  城八区  城八区   60\n",
      "3  中国   北京  城八区  城八区   70\n",
      "4  中国   北京  城八区  城八区   80\n",
      "5  中国   北京  城八区  城八区    E\n",
      "6  中国   北京  城八区  城八区    F\n",
      "7  中国   北京  城八区  城八区    G\n",
      "8  中国   北京  城八区  城八区    H\n",
      "9  中国   北京  城八区  城八区    I\n"
     ]
    }
   ],
   "execution_count": 61
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:32:17.759189Z",
     "start_time": "2025-09-15T07:32:17.752566Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 如果想要替换的孩子一样\n",
    "list3 = ['E','F','G','H','I']\n",
    "df.replace(list3,90,inplace=True)\n",
    "print(df)"
   ],
   "id": "7b3f1cdf9e5c68fe",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家   省市   城市  城市2   数值\n",
      "0  中国   北京  城八区  城八区  100\n",
      "1  中国   北京  城八区  城八区   50\n",
      "2  中国  NaN  城八区  城八区   60\n",
      "3  中国   北京  城八区  城八区   70\n",
      "4  中国   北京  城八区  城八区   80\n",
      "5  中国   北京  城八区  城八区   90\n",
      "6  中国   北京  城八区  城八区   90\n",
      "7  中国   北京  城八区  城八区   90\n",
      "8  中国   北京  城八区  城八区   90\n",
      "9  中国   北京  城八区  城八区   90\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\16357\\AppData\\Local\\Temp\\ipykernel_12584\\942846459.py:3: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n",
      "  df.replace(list3,90,inplace=True)\n"
     ]
    }
   ],
   "execution_count": 62
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:19:13.136036Z",
     "start_time": "2025-09-15T07:19:13.127207Z"
    }
   },
   "cell_type": "code",
   "source": [
    "## 替换某个数据的部分内容，比如城市 中的 城八区 中的城 替换成 城市\n",
    "df['城市'] = df['城市'].str.replace('城','城市')\n",
    "print(df)"
   ],
   "id": "4e7fcb120f8d6c3c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家   省市    城市  城市2   数值\n",
      "0  中国   北京  城市八区  海淀区  100\n",
      "1  中国   北京  城市八区  海淀区   50\n",
      "2  中国  NaN  城市八区  海淀区   60\n",
      "3  中国   北京  城市八区  海淀区   70\n",
      "4  中国   北京  城市八区  海淀区   80\n",
      "5  中国   北京  城市八区  海淀区   90\n",
      "6  中国   北京  城市八区  海淀区   90\n",
      "7  中国   北京  城市八区  海淀区   90\n",
      "8  中国   北京  城市八区  海淀区   90\n",
      "9  中国   北京  城市八区  海淀区   90\n"
     ]
    }
   ],
   "execution_count": 35
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 正则表达式替换",
   "id": "58098da90cd10e75"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:21:09.974033Z",
     "start_time": "2025-09-15T07:21:09.962037Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_excel(path+'替换.xlsx')\n",
    "print(df)\n",
    "# 使用正则表达式替换\n",
    "df.replace('[A-Z]',77,regex=True,inplace=True)\n",
    "print(df)"
   ],
   "id": "656ff6ee9a43b18f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家   省市   城市  城市2   数值\n",
      "0  中国   北京  城八区  城八区  100\n",
      "1  中国   北京  城八区  城八区    A\n",
      "2  中国  NaN  城八区  城八区    B\n",
      "3  中国   北京  城八区  城八区    C\n",
      "4  中国   北京  城八区  城八区    D\n",
      "5  中国   北京  城八区  城八区    E\n",
      "6  中国   北京  城八区  城八区    F\n",
      "7  中国   北京  城八区  城八区    G\n",
      "8  中国   北京  城八区  城八区    H\n",
      "9  中国   北京  城八区  城八区    I\n",
      "   国家   省市   城市  城市2   数值\n",
      "0  中国   北京  城八区  城八区  100\n",
      "1  中国   北京  城八区  城八区   77\n",
      "2  中国  NaN  城八区  城八区   77\n",
      "3  中国   北京  城八区  城八区   77\n",
      "4  中国   北京  城八区  城八区   77\n",
      "5  中国   北京  城八区  城八区   77\n",
      "6  中国   北京  城八区  城八区   77\n",
      "7  中国   北京  城八区  城八区   77\n",
      "8  中国   北京  城八区  城八区   77\n",
      "9  中国   北京  城八区  城八区   77\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\16357\\AppData\\Local\\Temp\\ipykernel_12584\\2903262955.py:4: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n",
      "  df.replace('[A-Z]',77,regex=True,inplace=True)\n"
     ]
    }
   ],
   "execution_count": 37
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 替换空值\n",
   "id": "8b354cf07bf45b4d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:31:29.013912Z",
     "start_time": "2025-09-15T07:31:29.000340Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import numpy as np\n",
    "df = pd.read_excel(path+'替换.xlsx')\n",
    "data = df.replace({None:np.nan})\n",
    "# data2 = data.fillna(method='ffill')\n",
    "# data2 = data.ffill()\n",
    "data2 = data.bfill()\n",
    "print(data2)"
   ],
   "id": "a4e2fa04f04019af",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家  省市   城市  城市2   数值\n",
      "0  中国  北京  城八区  城八区  100\n",
      "1  中国  北京  城八区  城八区    A\n",
      "2  中国  北京  城八区  城八区    B\n",
      "3  中国  北京  城八区  城八区    C\n",
      "4  中国  北京  城八区  城八区    D\n",
      "5  中国  北京  城八区  城八区    E\n",
      "6  中国  北京  城八区  城八区    F\n",
      "7  中国  北京  城八区  城八区    G\n",
      "8  中国  北京  城八区  城八区    H\n",
      "9  中国  北京  城八区  城八区    I\n"
     ]
    }
   ],
   "execution_count": 59
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "##  根据判断条件替换数据",
   "id": "f0cf0f2e6ae2a7b9"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:42:20.756149Z",
     "start_time": "2025-09-15T07:42:20.745124Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_excel(path+'替换.xlsx')\n",
    "# print(df.loc[df['数值']>60,'数值'])\n",
    "# df['城市2'] = np.where(df['城市2'].str.contains('城'),'京八区',df['城市2'])\n",
    "df['城市2'] = np.where(df['数值'] >60, '京八区',df['城市2'])\n",
    "print(df)\n",
    "# print(np.where(df['数值'] >60),)"
   ],
   "id": "23a8007059d00f6d",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   国家   省市   城市  城市2   数值\n",
      "0  中国   北京  城八区  京八区  100\n",
      "1  中国   北京  城八区  京八区   88\n",
      "2  中国  NaN  城八区  京八区   77\n",
      "3  中国   北京  城八区  京八区   99\n",
      "4  中国   北京  城八区  京八区   66\n",
      "5  中国   北京  城八区  城八区   55\n",
      "6  中国   北京  城八区  城八区   44\n",
      "7  中国   北京  城八区  城八区   33\n",
      "8  中国   北京  城八区  城八区   22\n",
      "9  中国   北京  城八区  城八区   10\n"
     ]
    }
   ],
   "execution_count": 80
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 使用字典映射替换",
   "id": "423ccca31909701c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-15T07:47:05.718977Z",
     "start_time": "2025-09-15T07:47:05.709945Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_excel(path+'替换2.xlsx')\n",
    "dict1 = {\n",
    "    'A':'优',\n",
    "    'B':'良',\n",
    "    'C':'中',\n",
    "}\n",
    "# df.replace(dict1,inplace=True)\n",
    "df['等级'] = df['等级'].map(dict1)\n",
    "print(df)"
   ],
   "id": "287755f3ee2b2c08",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   编号   姓名 等级\n",
      "0   1  谭鑫宇  中\n",
      "1   2  捏如风  良\n",
      "2   3  韩耀祖  优\n"
     ]
    }
   ],
   "execution_count": 86
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
